Skip to content

Pipeline: épicos via parent, sync resiliente e paralelização - #15

Merged
MariaHilmar merged 5 commits into
mainfrom
feat/gitlab-epics-merges-sync
Jul 28, 2026
Merged

Pipeline: épicos via parent, sync resiliente e paralelização#15
MariaHilmar merged 5 commits into
mainfrom
feat/gitlab-epics-merges-sync

Conversation

@MariaHilmar

Copy link
Copy Markdown
Owner

Resumo

Torna o pipeline resiliente e correto para o KPI "Mergeadas por época".

Épicos (GitLab)

  • Resolução do épico via Parent (work item hierarchy) + fallbacks REST/projetos.
  • backfill_epicos_mergeadas.py e audit_epicos_grupo.py para preencher/validar.

Retenção do histórico

  • config.closed_exclude_days()MGI_CLOSED_EXCLUDE_DAYS em runtime; 0 = mantém todo o histórico (fechadas antigas não são mais podadas), necessário para o KPI de mergeadas.

Resiliência e performance

  • Paralelização (ThreadPoolExecutor, sessão por thread) de merge dates e épicos-projetos — de ~127s para ~4s em 60 issues.
  • Timeouts HTTP configuráveis por env; timeout baixo evita que 1 request travado segure um worker por 2 min.
  • sync_supabase.py: DELETE de issue_participants em lotes (corrige HTTP 414 com muitas chaves).

Testes

  • conftest: fixture autouse isola os.environ e flags do config por teste (evita vazamento do .env local entre testes, que quebrava testes por ordem de execução).
  • 209 testes passando.

🤖 Generated with Claude Code

MariaHilmar and others added 5 commits July 28, 2026 07:48
Épicos (GitLab):
- resolução de épico via Parent (work item hierarchy) + fallbacks REST/projetos
- gitlab_epics.py: enriquecimento em lote, catálogo do grupo
- backfill_epicos_mergeadas.py e audit_epicos_grupo.py

Retenção / filtro de fechadas:
- config.closed_exclude_days() lê MGI_CLOSED_EXCLUDE_DAYS em runtime; 0 = mantém
  todo o histórico (necessário para "Mergeadas por época")

Resiliência e performance:
- merge dates (gitlab_merges.py) e épicos-projetos (gitlab_epics.py)
  paralelizados com ThreadPoolExecutor (sessão por thread)
- timeouts HTTP configuráveis por env (MGI_GITLAB_HTTP_TIMEOUT, RETRIES,
  RETRY_DELAY, MERGE_WORKERS, EPIC_WORKERS, GRAPHQL_TIMEOUT); timeout baixo
  evita 1 request travado segurar um worker
- sync_supabase.py: DELETE de issue_participants em lotes (evita HTTP 414)

Testes:
- conftest: fixture autouse isola os.environ e flags do config por teste
  (evita vazamento do .env local entre testes)
- 209 testes passando

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- gitlab_epics._buscar_issues_do_epico: sanitiza segmentos do path da URL
  (urllib.parse.quote no grupo + int no iid) — corrige S7044 (Security Rating)
- pyproject: per-file-ignore E402 em atualizar_gitlab_issues.py (imports após
  _load_dotenv_early por design)
- ruff --fix: remove import sys não usado (audit_epicos_grupo) e ordena imports
  do conftest

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
test_enriquecer_issues_com_epicos e test_aplicar_epicos_em_issues_retorna_vinculos
dependiam do GITLAB_TOKEN real do .env (enriquecer_epicos_via_filhas_grupo
retorna 0 sem token) — passavam local mas falhavam no CI (sem .env). Agora
mockam _any_gitlab_token. conftest isola GITLAB_TOKEN* para os testes rodarem
token-less como no CI (também elimina chamadas de rede reais: suíte de ~255s p/ ~6s).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@MariaHilmar
MariaHilmar merged commit 9bc7dba into main Jul 28, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant